package 集合;
import java.util.*;

public class X08Optional类
{
	public static void main(String[]args){
		//鹅创建optional对象方式
		Optional<String> optional=Optional.of("lucy");
		Optional<String> optiona2=Optional.ofNullable("lucy");//如果值为空，调用下面方法，不为空调用上面方法
		Optional<String> optiona3=Optional.empty();
		
		System.out.println(optional.get());//不空返回值，空抛异常
		System.out.println(optional.isPresent());//空返回false，非空返回true
		//optional.ifPresent(消费者块);//有值执行操作
		optional.orElse("lily");//有值返回值，无值返回参数"lily"
		
		/*
		 empty
		 public static <T> Optional<T> empty()
		 返回一个空的Optional实例。 此可选项不存在值。
		 API Note:
		 虽然这样做可能很诱人，但是如果Option.empty()返回的Option.empty()与== ，则避免测试对象是否为空。 不能保证是单身人士。 相反，请使用isPresent() 。
		 参数类型
		 T - 不存在值的类型
		 结果
		 一个空的 Optional
		 of
		 public static <T> Optional<T> of(T value)
		 返回具有 Optional的当前非空值的Optional。
		 参数类型
		 T - 该类的值
		 参数
		 value - 要存在的值，它必须是非空值
		 结果
		 一个 Optional的值存在
		 异常
		 NullPointerException - 如果值为空
		 ofNullable
		 public static <T> Optional<T> ofNullable(T value)
		 返回一个 Optional指定值的Optional，如果非空，则返回一个空的 Optional 。
		 参数类型
		 T - 该类的值
		 参数
		 value - 可能为null的值来描述
		 结果
		 一个 Optional ，如果指定的值不为空，则为当前值，否则为空 Optional
		 get
		 public T get()
		 如果 Optional中存在值，则返回值，否则抛出 NoSuchElementException 。
		 结果
		 该 Optional非空值
		 异常
		 NoSuchElementException - 如果没有值存在
		 另请参见：
		 isPresent()
		 isPresent
		 public boolean isPresent()
		 如果存在值，则返回 true ，否则为 false 。
		 结果
		 true若有存在值，否则为 false
		 ifPresent
		 public void ifPresent(Consumer<? super T> consumer)
		 如果存在值，则使用该值调用指定的消费者，否则不执行任何操作。
		 参数
		 consumer - 如果存在值，则执行块
		 异常
		 NullPointerException - 如果值存在且 consumer为空
		 filter
		 public Optional<T> filter(Predicate<? super T> predicate)
		 如果一个值存在，并且该值给定的谓词相匹配时，返回一个 Optional描述的值，否则返回一个空的 Optional 。
		 参数
		 predicate - 一个应用于该值的谓词（如果存在）
		 结果
		 一个 Optional描述此的值 Optional一个值是否存在，并且值给定的谓词相匹配，否则一个空 Optional
		 异常
		 NullPointerException - 如果谓词为空
		 map
		 public <U> Optional<U> map(Function<? super T,? extends U> mapper)
		 如果存在值，则应用提供的映射函数，如果结果不为空，则返回一个Optional结果的Optional 。 否则返回一个空的Optional 。
		 API Note:
		 此方法支持对可选值进行后处理，无需明确检查返回状态。 例如，以下代码遍历文件名流，选择尚未处理的代码，然后打开该文件，返回Optional<FileInputStream> ：
		 Optional<FileInputStream> fis = names.stream().filter(name -> !isProcessedYet(name)) .findFirst() .map(name -> new FileInputStream(name));  
		 这里， findFirst返回一个Optional<String> ，然后map返回一个Optional<FileInputStream>为所需文件（如果存在）。
		 参数类型
		 U - 映射函数的结果类型
		 参数
		 mapper - 应用于值的映射函数（如果存在）
		 结果
		 一个 Optional描述了将映射函数应用于该值 Optional的值的 Optional ，如果存在值，否则为空 Optional
		 异常
		 NullPointerException - 如果映射函数为空
		 flatMap
		 public <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
		 如果一个值存在，应用提供的Optional映射函数给它，返回该结果，否则返回一个空的Optional 。 这种方法类似于map(Function) ，但是提供的映射器是一个结果已经是Optional映射器，如果被调用， flatMap不会用额外的Optional 。
		 参数类型
		 U - 返回的 Optional的类型参数
		 参数
		 mapper - 应用于值的映射函数，如果存在映射函数
		 结果
		 施加的结果 Optional荷瘤映射函数此的值 Optional ，如果一个值存在，否则一个空 Optional
		 异常
		 NullPointerException - 如果映射函数为空或返回空结果
		 orElse
		 public T orElse(T other)
		 返回值如果存在，否则返回 other 。
		 参数
		 other - 如果没有值存在则返回的值可以为null
		 结果
		 价值，如果存在，否则 other
		 orElseGet
		 public T orElseGet(Supplier<? extends T> other)
		 返回值（如果存在），否则调用 other并返回该调用的结果。
		 参数
		 other - 一个 Supplier ，如果没有值，则返回其结果
		 结果
		 的值（如果存在）的结果的其他方式 other.get()
		 异常
		 NullPointerException - 如果值不存在，并且 other为空
		 orElseThrow
		 public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
		 throws X extends Throwable
		 返回包含的值（如果存在），否则抛出由提供的供应商创建的异常。
		 API Note:
		 可以使用具有空参数列表的异常构造函数的方法引用作为供应商。 例如， IllegalStateException::new
		 参数类型
		 X - 要抛出的异常的类型
		 参数
		 exceptionSupplier - 将返回要抛出的异常的供应商
		 结果
		 现值
		 异常
		 X - 如果没有值存在
		 NullPointerException - 如果没有值， exceptionSupplier为空
		 X extends Throwable
		 equals
		 public boolean equals(Object obj)
		 指示某个其他对象是否等于此可选项。 另一个对象被认为是相等的：
		 它也是一个Optional和;
		 或者;
		 现在的值通过equals() “相等”。
		 重写：
		 equals在类别 Object
		 参数
		 obj - 要进行相等测试的对象
		 结果
		 {code true}如果另一个对象“等于”这个对象否则 false
		 另请参见：
		 Object.hashCode() ， HashMap
		 hashCode
		 public int hashCode()
		 返回当前值的哈希码值（如果有的话），如果没有值，则返回0（零）。
		 重写：
		 hashCode在 Object
		 结果
		 当前值的哈希码值，如果没有值，则为0
		 另请参见：
		 Object.equals(java.lang.Object) ， System.identityHashCode(java.lang.Object)
		 toString
		 public String toString()
		 返回此可选的非空字符串表示，适用于调试。 准确的表示格式是未指定的，可能会在实现和版本之间变化。
		 重写：
		 toString在 Object
		 实现要求：
		 如果存在值，则结果必须在其结果中包含其字符串表示形式。 空和现在可选择性必须明确区分。
		 结果
		 该实例的字符串表示形式
		*/
		
		
	}
}
